<!DOCTYPE html>
<html lang="zh" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro" xmlns:th="http://www.thymeleaf.org">
    <head>
        <th:block th:include="include :: header('代码生成列表')"/>
    </head>
    <body class="gray-bg">
        <div class="container-div">
            <div class="row">
                <div class="col-sm-12 search-collapse">
                    <form id="gen-form">
                        <div class="select-list">
                            <ul>
                                <li>
                                    表名称：<input name="tableName" type="text"/>
                                </li>
                                <li>
                                    表描述：<input name="tableComment" type="text"/>
                                </li>
                                <li class="select-time">
                                    <label>表时间： </label>
                                    <input class="time-input" id="startTime" name="params[beginTime]"
                                           placeholder="开始时间"
                                           type="text"/>
                                    <span>-</span>
                                    <input class="time-input" id="endTime" name="params[endTime]" placeholder="结束时间"
                                           type="text"/>
                                </li>
                                <li>
                                    <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i
                                            class="fa fa-search"></i>&nbsp;搜索</a>
                                    <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i
                                            class="fa fa-refresh"></i>&nbsp;重置</a>
                                </li>
                            </ul>
                        </div>
                    </form>
                </div>

                <div class="btn-group-sm" id="toolbar" role="group">
                    <a class="btn btn-success multiple disabled" onclick="batchGenCode()"
                       shiro:hasPermission="tool:gen:code">
                        <i class="fa fa-download"></i> 生成
                    </a>
                    <a class="btn btn-success" onclick="createTable()" shiro:hasRole="admin">
                        <i class="fa fa-plus"></i> 创建
                    </a>
                    <a class="btn btn-info" onclick="importTable()">
                        <i class="fa fa-upload"></i> 导入
                    </a>
                    <a class="btn btn-primary single disabled" onclick="$.operate.editTab()"
                       shiro:hasPermission="tool:gen:edit">
                        <i class="fa fa-edit"></i> 修改
                    </a>
                    <a class="btn btn-danger multiple disabled" onclick="$.operate.removeAll()"
                       shiro:hasPermission="tool:gen:remove">
                        <i class="fa fa-remove"></i> 删除
                    </a>
                </div>

                <div class="col-sm-12 select-table table-striped">
                    <table id="bootstrap-table"></table>
                </div>
            </div>
        </div>
        <th:block th:include="include :: footer"/>
        <th:block th:include="include :: bootstrap-table-export-js"/>
        <script th:src="@{/ajax/libs/highlight/highlight.min.js}"></script>
        <script th:inline="javascript">
            var prefix = ctx + "tool/gen";
            var editFlag = [[${@permission.hasPermi('tool:gen:edit')}]];
            var removeFlag = [[${@permission.hasPermi('tool:gen:remove')}]];
            var previewFlag = [[${@permission.hasPermi('tool:gen:preview')}]];
            var codeFlag = [[${@permission.hasPermi('tool:gen:code')}]];

            $(function () {
                var options = {
                    url: prefix + "/list",
                    updateUrl: prefix + "/edit/{id}",
                    removeUrl: prefix + "/remove",
                    sortName: "createTime",
                    sortOrder: "desc",
                    showExport: true,
                    modalName: "生成配置",
                    rememberSelected: true,
                    uniqueId: "tableId",
                    columns: [{
                        field: 'state',
                        checkbox: true
                    },
                        {
                            field: 'tableId',
                            title: '编号',
                            visible: false
                        },
                        {
                            title: "序号",
                            formatter: function (value, row, index) {
                                return $.table.serialNumber(index);
                            }
                        },
                        {
                            field: 'tableName',
                            title: '表名称',
                            sortable: true,
                            formatter: function (value, row, index) {
                                return $.table.tooltip(value);
                            }
                        },
                        {
                            field: 'tableComment',
                            title: '表描述',
                            sortable: true,
                            formatter: function (value, row, index) {
                                return $.table.tooltip(value, 15);
                            }
                        },
                        {
                            field: 'className',
                            title: '实体类名称',
                            sortable: true
                        },
                        {
                            field: 'createTime',
                            title: '创建时间',
                            sortable: true
                        },
                        {
                            field: 'updateTime',
                            title: '更新时间',
                            sortable: true
                        },
                        {
                            title: '操作',
                            align: 'center',
                            formatter: function (value, row, index) {
                                var actions = [];
                                actions.push('<a class="btn btn-info btn-xs ' + previewFlag + '" href="javascript:void(0)" onclick="preview(\'' + row.tableId + '\')"><i class="fa fa-search"></i>预览</a> ');
                                actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.editTab(\'' + row.tableId + '\')"><i class="fa fa-edit"></i>编辑</a> ');
                                actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.tableId + '\')"><i class="fa fa-remove"></i>删除</a> ');
                                actions.push('<a class="btn btn-warning btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="synchDb(\'' + row.tableName + '\')"><i class="fa fa-refresh"></i>同步</a> ');
                                actions.push('<a class="btn btn-primary btn-xs ' + codeFlag + '" href="javascript:void(0)" onclick="genCode(\'' + row.tableName + '\',\'' + row.genType + '\')"><i class="fa fa-bug"></i>生成代码</a> ');
                                return actions.join('');
                            }
                        }]
                };
                $.table.init(options);
            });

            // 预览代码
            function preview(tableId) {
                var preViewUrl = prefix + "/preview/" + tableId;
                $.modal.loading("正在加载数据，请稍候...");
                $.get(preViewUrl, function (result) {
                    if (result.code == web_status.SUCCESS) {
                        var items = [];
                        $.each(result.data, function (index, value) {
                            var templateName = index.substring(index.lastIndexOf("/") + 1, index.length).replace(/\.vm/g, "");
                            if (!$.common.equals("sql", templateName) && !$.common.equals("tree.html", templateName) && !$.common.equals("sub-domain.java", templateName)) {
                                var codeName = templateName.replace(".", "");
                                var language = templateName.substring(templateName.lastIndexOf(".") + 1);
                                var highCode = hljs.highlight(language, value).value;
                                items.push({
                                    title: templateName,
                                    content: "<pre class=\"layui-code\"><a style=\"float:right\" href=\"javascript:copyText('" + codeName + "')\"><i class=\"fa fa-copy\"></i> 复制</a><code id=\"" + codeName + "\">" + highCode + "</code></pre><textarea id=\"t_" + codeName + "\" style='position: absolute;top: 0;left: 0;opacity: 0;z-index: -10;'></textarea><script>function copyText(codeName){var text = document.getElementById(codeName).innerText;var input = document.getElementById(\"t_\"+codeName);input.value = text;input.select();document.execCommand(\"copy\");$.modal.msgSuccess(\"复制成功\");}<\/script>"
                                })
                            }
                        });
                        top.layer.tab({
                            area: ['90%', '90%'],
                            shadeClose: true,
                            success: function (layero, index) {
                                parent.loadCss(ctx + "ajax/libs/highlight/default.min.css");
                            },
                            tab: items
                        });
                    } else {
                        $.modal.alertError(result.msg);
                    }
                    $.modal.closeLoading();
                });
            }

            // 生成代码
            function genCode(tableName, genType) {
                $.modal.confirm("确定要生成" + tableName + "表代码吗？", function () {
                    if (genType === "0") {
                        location.href = prefix + "/download/" + tableName;
                        layer.msg('执行成功,正在生成代码请稍候…', {icon: 1});
                    } else if (genType === "1") {
                        $.operate.get(prefix + "/genCode/" + tableName);
                    }
                })
            }

            // 同步数据库
            function synchDb(tableName) {
                $.modal.confirm("确认要强制同步" + tableName + "表结构吗？", function () {
                    $.operate.get(prefix + "/synchDb/" + tableName);
                })
            }

            // 批量生成代码
            function batchGenCode() {
                var rows = $.table.selectColumns("tableName");
                if (rows.length == 0) {
                    $.modal.alertWarning("请选择要生成的数据");
                    return;
                }
                $.modal.confirm("确认要生成选中的" + rows.length + "条数据吗?", function () {
                    location.href = prefix + "/batchGenCode?tables=" + rows;
                    layer.msg('执行成功,正在生成代码请稍候…', {icon: 1});
                });
            }

            // 导入表结构
            function importTable() {
                var importTableUrl = prefix + "/importTable";
                $.modal.open("导入表结构", importTableUrl);
            }

            // 创建表结构
            function createTable() {
                var creatTableUrl = prefix + "/createTable";
                $.modal.open("创建表结构", creatTableUrl);
            }
        </script>
    </body>
</html>